﻿using GalaSoft.MvvmLight.Messaging;
using System;
using System.Data.SqlClient;
using System.Windows;
using TransControlSystem.View.Common;
using TransControlSystem.ViewModel.Common;

namespace TransControlSystem.View
{
    /// <summary>
    /// LoginWindow.xaml 的交互逻辑
    /// </summary>
    public partial class LoginWindow : Window
    {
        public LoginWindow()
        {
            InitializeComponent();
            #region SQL Server 2008 R2 安装验证
            //string strValue = "";
            //if (!CheckDatabaseExists("IntelligentStackerSystem"))
            //{
            //    if (false == Directory.Exists("E:\\IntelligentStackerSystemDataBase"))
            //    {
            //        Directory.CreateDirectory("E:\\IntelligentStackerSystemDataBase");
            //    }
            //    try
            //    {
            //        string line = "";
            //        string strData1 = "";
            //        // 创建一个 StreamReader 的实例来读取文件 ,using 语句也能关闭 StreamReader
            //        using (StreamReader sr = new StreamReader(Environment.CurrentDirectory + "//DBScript//createDB.sql"))
            //        {
            //            // 从文件读取并显示行，直到文件的末尾
            //            while ((line = sr.ReadLine()) != null)
            //            {
            //                strData1 += line + "\r\n";
            //            }
            //        }
            //        line = "";
            //        string strData2 = "";
            //        // 创建一个 StreamReader 的实例来读取文件 ,using 语句也能关闭 StreamReader
            //        using (StreamReader sr = new StreamReader(Environment.CurrentDirectory + "//DBScript//createTable.sql"))
            //        {
            //            // 从文件读取并显示行，直到文件的末尾
            //            while ((line = sr.ReadLine()) != null)
            //            {
            //                strData2 += line + "\r\n";
            //            }
            //        }
            //        using (IDbConnection connection = new SqlConnection("server=127.0.0.1;database=master;uid=sa;pwd=zw1234aA#"))
            //        {
            //            connection.Execute(strData1);
            //            connection.Execute(strData2);
            //        }
            //    }
            //    catch (Exception e)
            //    {
            //        MessageBox.Show(e.Message, "错误", MessageBoxButton.OK, MessageBoxImage.Exclamation);
            //        Environment.Exit(1);//退出程序
            //    }
            //}
            #endregion SQL Server 2008 R2 安装验证
            #region 只能运行一个客户端程序
            //第一个参数:true--给调用线程赋予互斥体的初始所属权
            //第二个参数:互斥体的名称
            //第三个参数:返回值,如果调用线程已被授予互斥体的初始所属权,则返回true
            //System.Threading.Mutex mutex = new System.Threading.Mutex(true, "LoginWindow", out bool flag);
            ////如果是false则提示已经运行   
            //if (!flag)
            //{
            //    MessageBox.Show("只能运行一个本程序！", "警告", MessageBoxButton.OK, MessageBoxImage.Exclamation);
            //    Environment.Exit(1);//退出程序
            //}
            #region 判断系统是否已启动

            System.Diagnostics.Process[] myProcesses = System.Diagnostics.Process.GetProcessesByName("TransControlSystem");//获取指定的进程名  
            if (myProcesses.Length > 1) //如果可以获取到知道的进程名则说明已经启动
            {
                MessageBox.Show("只能运行一个本程序！", "警告", MessageBoxButton.OK, MessageBoxImage.Exclamation);
                Environment.Exit(1);//退出程序
            }
            #endregion
            #endregion 只能运行一个客户端程序
            //隐藏登录窗体
            Messenger.Default.Register<NotificationMessage>(this, (nm) =>
            {
                if (nm.Notification == "HideLoginWindow")
                {
                    if (nm.Sender == DataContext)
                    {
                        Hide();
                    }
                }
            });
            #region 窗体注册中心 不注册无法打开和隐藏窗体
            //登录窗体
            WindowManager.Register<LoginWindow>("LoginWindow");
            //主窗体
            WindowManager.Register<MainWindow>("MainWindow");
            //优先级配置窗体
            WindowManager.Register<PriorityConfigWindow>("PriorityConfigWindow");
            //任务查询
            WindowManager.Register<TaskQueryWindow>("TaskQueryWindow");
            //控制模式切换窗体
            WindowManager.Register<ControlModeSwitchingWindow>("ControlModeSwitchingWindow");
            //PLC的IP地址配置
            WindowManager.Register<PlcAddressConfigWindow>("PlcAddressConfigWindow");
            //PLC标签配置窗体
            WindowManager.Register<TagInfoConfigWindow>("TagInfoConfigWindow");
            //PLC标签编辑值窗体
            WindowManager.Register<TagInfoEditWindow>("TagInfoEditWindow");
            //通讯测试窗体
            WindowManager.Register<CommunicationTestWindow>("CommunicationTestWindow");
            //模拟演示窗体
            WindowManager.Register<DemoTestWindow>("DemoTestWindow");
            //铝垛信息程序块配置窗体
            //WindowManager.Register<AluminumStackTagInfoConfigWindow>("AluminumStackTagInfoConfigWindow");
            //铝垛信息明细窗体
            //WindowManager.Register<AluminumStackTagInfoDetailWindow>("AluminumStackTagInfoDetailWindow");

            //------------------------以上为本项目核心功能页面，以下为通用功能页面
            //退出验证窗体
            WindowManager.Register<ExitAppliacationWindow>("ExitAppliacationWindow");
            //确认窗体
            WindowManager.Register<ConfirmWindow>("ConfirmWindow");
            //警告窗体
            WindowManager.Register<WarningWindow>("WarningWindow");
            //用户管理窗体
            WindowManager.Register<UserManagementWindow>("UserManagementWindow");
            //创建用户窗体
            WindowManager.Register<CreateUserWindow>("CreateUserWindow");
            //编辑用户窗体
            WindowManager.Register<EditUserWindow>("EditUserWindow");
            //编辑用户窗体
            WindowManager.Register<EditValueWindow>("EditValueWindow");
            //日志窗体
            WindowManager.Register<LogWindow>("LogWindow");
            //远程半自动模式窗体
            WindowManager.Register<RemoteSemiAutomaticWindows>("RemoteSemiAutomaticWindows");
            #endregion 窗体注册中心 不注册无法打开和隐藏窗体
        }

        /// <summary>
        /// 检测数据库是否存在
        /// </summary>
        /// <param name="databaseName">数据库名称</param>
        /// <returns></returns>
        private bool CheckDatabaseExists(string databaseName)
        {
            {
                string sqlCreateDBQuery;
                bool result = false;
                try
                {
                    SqlConnection tmpConn = new SqlConnection(@"server=127.0.0.1;database=master;uid=sa;pwd=zw1234aA#");
                    sqlCreateDBQuery = string.Format("SELECT database_id from sys.databases WHERE Name  = '{0}'", databaseName);
                    using (tmpConn)
                    {
                        using (SqlCommand sqlCmd = new SqlCommand(sqlCreateDBQuery, tmpConn))
                        {
                            tmpConn.Open();
                            object resultObj = sqlCmd.ExecuteScalar();
                            int databaseID = 0;
                            if (resultObj != null)
                            {
                                int.TryParse(resultObj.ToString(), out databaseID);
                            }
                            tmpConn.Close();
                            result = (databaseID > 0);
                        }
                    }
                }
                catch (Exception e)
                {
                    result = false;
                    MessageBox.Show(e.Message, "错误", MessageBoxButton.OK, MessageBoxImage.Exclamation);
                    Environment.Exit(1);//退出程序
                }
                return result;
            }
        }

        /// <summary>
        /// 当程序关闭时则隐藏此窗体
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
        {
            e.Cancel = true;
            Visibility = Visibility.Hidden;
        }
    }
}
